import { get, post } from "@/api/request";

/**
 * 字典控制器 / 字典控制器添加
 * @param {object} data
 * @param {string} [data.dictKey] 字典键（英文标识）
 * @param {number} [data.dictOrder] 排序
 * @param {string} [data.dictValue] 字典值
 * @param {boolean} [data.enabled] 状态（启用true；禁用false）
 * @param {number} [data.parentDictId] 字典类型ID
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<SysDict页面展示实体>}
 * @author 方昊
 */
export function systemDictAdd(data, config) {
  return post("/system/dict/add", data, config);
}

/**
 * 字典控制器 / 字典控制器获得所有字典列表
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<array<Dict简化页面展示实体>>}
 * @author 方昊
 */
export function systemDictAll(config) {
  return get("/system/dict/all", config);
}

/**
 * 字典控制器 / 字典控制器删除
 * @param {object} data
 * @param {array<number>} data.list 字典ID列表
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<number>}
 * @author 方昊
 */
export function systemDictDelete(data, config) {
  return post("/system/dict/delete", data, config);
}

/**
 * 字典控制器 / 字典控制器查询详情
 * @param {object} params
 * @param {number} params.id 字典ID
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<SysDict页面展示实体>}
 * @author 方昊
 */
export function systemDictDetail(params, config) {
  return get("/system/dict/detail", params, config);
}

/**
 * 字典控制器 / 字典控制器分页查询
 * @param {object} data
 * @param {number} [data.dictTypeId] 字典类型ID
 * @param {string} [data.dictValue] 字典值（英文标识）
 * @param {boolean} [data.enabled] 状态（启用true；禁用false）
 * @param {number} [data.length] 分页大小
 * @param {number} [data.orderAsc] 排序方向
 * @param {string} [data.orderColum] 排序字段
 * @param {number} [data.pageIndex] 分页下标
 * @param {number} [data.start] 查询记录起始下标
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<分页返回实体<SysDict页面展示实体>>}
 * @author 方昊
 */
export function systemDictList(data, config) {
  return post("/system/dict/list", data, config);
}

/**
 * 字典控制器 / 字典控制器更新
 * @param {object} data
 * @param {string} [data.dictKey] 字典键（英文标识）
 * @param {number} [data.dictOrder] 排序
 * @param {string} [data.dictValue] 字典值
 * @param {boolean} [data.enabled] 状态（启用true；禁用false）
 * @param {number} [data.id] 主键
 * @param {number} [data.parentDictId] 字典类型ID
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<SysDict页面展示实体>}
 * @author 方昊
 */
export function systemDictUpdate(data, config) {
  return post("/system/dict/update", data, config);
}

/**
 * @template T
 * @typedef {Object} 分页返回实体
 * @property {T[]} content - 内容
 * @property {number} elementsNo
 * @property {number} limit
 * @property {number} number
 * @property {number} totalElements
 * @property {number} totalPages
 * @description 分页返回实体
 */

/**
 * @typedef {object} Dict简化页面展示实体 页面展示实体
 * @property {string} code 父字典
 * @property {string} id 主键
 * @property {string} key 字典键
 * @property {string} parentDictId 父字典ID
 * @property {string} value 字典值
 * @description 页面展示实体
 */

/**
 * @typedef {object} SysDict页面展示实体 页面展示实体
 * @property {boolean} canDelete 是否拥有删除权限
 * @property {boolean} canEdit 是否拥有编辑权限
 * @property {string} createTime 创建时间
 * @property {string} createUser 创建用户
 * @property {string} createUserDeptName 创建人所属部门
 * @property {string} createUserRealName 创建人真实姓名
 * @property {boolean} delFlag 删除状态（已删除true， 未删除false）
 * @property {string} dictKey 字典键
 * @property {number} dictOrder 排序
 * @property {string} dictValue 字典值
 * @property {boolean} enabled 状态（启用true；禁用false）
 * @property {string} id 主键
 * @property {string} parentDictCode 父字典
 * @property {string} parentDictId 父字典ID
 * @property {string} parentDictName 父字典名称
 * @description 页面展示实体
 */
